package com.frank.code_notes.C01_array;

import cn.hutool.core.lang.Console;

import java.util.HashMap;
import java.util.Map;

/**
 * @Description 904.水果成篮
 * @Author zhoujr
 * @Data 2024/11/26 17:10
 */
public class L904FruitBasket {

    /**
     * @Description 注意左右节点前进时机和累计元素的数量
     */
    public static int totalFruit(int[] fruits) {
        int left = 0, res = 0;
        Map<Integer, Integer> map = new HashMap<>();
        for (int right = 0; right < fruits.length; right++) { // 右节点向前移动
            // 放入 map 并累加数量
            map.put(fruits[right], map.getOrDefault(fruits[right], 0) + 1);
            // 超过两个排除一个
            while (map.size() > 2) {
                // 放入 map 减掉数量
                map.put(fruits[left], map.get(fruits[left]) - 1);
                // 移除累计为0的元素
                if (map.get(fruits[left]) == 0) {
                    map.remove(fruits[left]);
                }
                left++; // 左节点向前移动
            }
            res = Math.max(res, right - left);
        }
        return res;
    }

    public static void main(String[] args) {
        Console.log(totalFruit(new int[]{3, 3, 3, 1, 2, 1, 1, 2, 3, 3, 4}));
    }

}
